﻿namespace Blip.API
{
    using System;

    /// <summary>
    /// Interfejs zapytań do serwisu Blip.
    /// </summary>
    public interface IBlipAPI
    {
        /// <summary>
        /// Zwraca do [limit] ostatnich statusów nowszych od [since]. Nie wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="limit">Limit pobieranych statusów</param>
        /// <param name="since">Identyfikator statusu, od którego rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetAllStatuses(BlipResponse callback, int limit = 20, int? since = null);
        
        /// <summary>
        /// Zwraca [limit] ostatnich statusów użytkownika [login] nowszych od [since]. Nie wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Nazwa użytkownika, którego statusy zostaną zwrócone</param>
        /// <param name="limit">Limit pobieranych statusów</param>
        /// <param name="since">Identyfikator statusu, od którego rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUserStatuses(BlipResponse callback, string login, int limit = 20, int? since = null);

        /// <summary>
        /// Zwraca do [limit] najnowszych statusów otagowanych [tag]. Nie wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="tag">Tag pobieranych statusów</param>
        /// <param name="limit">Limit pobieranych statusów</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetTags(BlipResponse callback, string tag, int limit = 20);

        /// <summary>
        /// Zwraca wszystkie statusy otagowane [tag] nowsze od statusu o id równym [since]. Nie wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="tag">Tag pobieranych statusów</param>
        /// <param name="since">Identyfikator statusu, od którego rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetTagsSince(BlipResponse callback, string tag, int since);

        /// <summary>
        /// Zwraca film skojarzony z update'em o id [id]. Nie wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="id">Identyfikator update'u</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetConnectedMovie(BlipResponse callback, int id);

        /// <summary>
        /// Zwraca nagranie skojarzone z updatem o id [id]. Nie wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="id">Identyfikator update'u</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetConnectedRecording(BlipResponse callback, int id);
        
        /// <summary>
        /// Zwraca listę obrazków należących do update'u o id [id]. Nie wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="id">Identyfikator update'u</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUpdatePictures(BlipResponse callback, int id);

        /// <summary>
        /// Zwraca [limit] najstarszych obrazków od wszystkich użytkowników nowszych od obrazka o id [since]. Nie wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="limit">Limit pobieranych obrazków</param>
        /// <param name="since">Identyfikator obrazka, od którego rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetPictures(BlipResponse callback, int limit = 20, int? since = null);

        /// <summary>
        /// Zwraca [limit] najstarszych linków od wszystkich użytkowników nowszych od linku o id [since]. Nie wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="limit">Limit pobieranych linków</param>
        /// <param name="since">Identyfikator linku, od którego rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetShortlinks(BlipResponse callback, int limit = 20, int? since = null);

        /// <summary>
        /// Zwraca obecną zawartość bliposfery. Nie wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetBliposphere(BlipResponse callback);

        /// <summary>
        /// Zwraca dane o użytkowniku [login]. Nie wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login pobieranego użytkownika</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUser(BlipResponse callback, string login);

        /// <summary>
        /// Zwraca awatar użytkownika [login]. Nie wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login użytkownika</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetAvatar(BlipResponse callback, string login);

        /// <summary>
        /// Zwraca tło użytkownika [login]. Nie wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login użytkownika</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetBackground(BlipResponse callback, string login);

        /// <summary>
        /// Zwraca do [limit] ostatnich statusów bieżącego użytkownika, nowszych od [since]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="limit">Limit pobieranych statusów</param>
        /// <param name="since">Identyfikator statusu, od którego rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetStatuses(BlipResponse callback, int limit = 20, int? since = null);

        /// <summary>
        /// Tworzy nowy status, nie przyjmuje prefixu. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="text">Treść statusu, nie przyjmuje prefixu</param>
        /// <param name="picture">Adres obrazka w formacie jpg dołączonego do wiadomości</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool AddStatus(BlipResponse callback, string text, Uri picture = null);

        /// <summary>
        /// Usuwa status o id [id]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="id">Identyfikator usuwanego statusu</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool DelStatus(BlipResponse callback, int id);

        /// <summary>
        /// Tworzy nowy update, rozróżniając wiadomości od statusów po prefiksie ">ktos:". Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="text">Treść tworzonego wpisu, wraz z opcjonalnym prekisem ">odbiorca:", który sprawia że tworzona jest wiadomość kierowana zamiast statusu</param>
        /// <param name="picture">Adres obrazka w formacie jpg do załączenia do update'u</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool AddUpdate(BlipResponse callback, string text, Uri picture = null);

        /// <summary>
        /// Zwraca [limit] najnowszych update'ów od wszystkich użytkowników nowszych od update'u [since]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="limit">Limit pobieranych update'ów</param>
        /// <param name="since">Identyfikator update'u, od którego rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetAllUpdates(BlipResponse callback, int limit = 20, int? since = null);

        /// <summary>
        /// Zwraca do [limit] najnowszych update'ów uwierzytelnionego usera. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="limit">Limit pobieranych update'ów</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUpdates(BlipResponse callback, int limit = 20);

        /// <summary>
        /// Zwraca wszystkie update'y bieżącego użytkownika nowsze od update'u o id równym [since]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="since">Identyfikator update'u, od którego rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUpdatesSince(BlipResponse callback, int since);

        /// <summary>
        /// Zwraca do [limit] najnowszych update'ów użytkownika [login]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login użytownika</param>
        /// <param name="limit">Limit pobieranych update'ów</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUserUpdates(BlipResponse callback, string login, int limit = 20);

        /// <summary>
        /// Zwraca wszystkie update'y użytkownika [login] nowsze od update'u z id [since]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login użytownika</param>
        /// <param name="since">Identyfikator update'u, od którego rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUserUpdatesSince(BlipResponse callback, string login, int since);

        /// <summary>
        /// Zwraca update o id [id]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="id">Identyfikator pobieranego update'u</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUpdate(BlipResponse callback, int id);

        /// <summary>
        /// Kasuje update o id [id]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="id">Identyfikator usuwanego update'u</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool DelUpdate(BlipResponse callback, int id);

        /// <summary>
        /// Tworzy nową wiadomość prywatną, nie przyjmuje prefiksu. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="recipientLogin">Login odbiorcy wiadomości</param>
        /// <param name="text">Treść tworzonej wiadomości, bez prefisku wskazującego odbiorcę</param>
        /// <param name="picture">Adres obrazka w formacie jpg dołączonego do wiadomości</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool AddDirectedMessage(BlipResponse callback, string recipientLogin, string text, Uri picture = null);

        /// <summary>
        /// Tworzy nową wiadomość prywatną, nie przyjmuje prefiksu. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="recipientId">Identyfikator odbiorcy wiadomości</param>
        /// <param name="text">Treść tworzonej wiadomości, bez prefisku wskazującego odbiorcę</param>
        /// <param name="picture">Adres obrazka w formacie jpg dołączonego do wiadomości</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool AddDirectedMessage(BlipResponse callback, int recipientId, string text, Uri picture = null);

        /// <summary>
        /// Pobiera do [limit] najnowszych wiadomości do lub od bieżącego użytkownika. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="limit">Limit pobieranych wiadomości</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetDirectedMessages(BlipResponse callback, int limit = 20);

        /// <summary>
        /// Pobiera wszytkie wiadomości do lub od bieżącego użytkownika nowsze od wiadomości z id [since]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="since">Identyfikator wiadomości, od której rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetDirectedMessagesSince(BlipResponse callback, int since);

        /// <summary>
        /// Pobiera do [limit] najnowszych wiadomości prywatnych wszystkich użytkowników nowsze od wiadomości z id [since]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="limit">Limit pobieranych wiadomości</param>
        /// <param name="since">Identyfikator wiadomości, od której rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetAllDirectedMessages(BlipResponse callback, int limit = 20, int? since = null);

        /// <summary>
        /// Pobiera do [limit] ostatnich wiadomości użytkownika [login]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login użytkownika</param>
        /// <param name="limit">Limit pobieranych wiadomości</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUserDirectedMessages(BlipResponse callback, string login, int limit = 20);

        /// <summary>
        /// Pobiera wszystkie wiadomości skierowane do użytkownika [login] nowsze od wiadomości z id [since]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login użytkownika</param>
        /// <param name="since">Identyfikator wiadomości, od której rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUserDirectedMessagesSince(BlipResponse callback, string login, int since);

        /// <summary>
        /// Pobiera wiadomość skierowaną o id [id]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="id">Identyfikator pobieranej wiadomości</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetDirectedMessage(BlipResponse callback, int id);

        /// <summary>
        /// Usuwa wiadomość skierowaną o id [id]. Wymaga uwierzytelnienia. 
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="id">Identyfikator usuwanej wiadomości skierowanej</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool DelDirectedMessage(BlipResponse callback, int id);

        /// <summary>
        /// Pobiera do [limit] najnowszych prywatnych wiadomości do lub od bieżącego użytkownika. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="limit">Limit pobieranych wiadomości prywatnej</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetPrivateMessages(BlipResponse callback, int limit = 20);

        /// <summary>
        /// Pobiera wszytkie prywatne wiadomości do lub od bieżącego użytkownika nowsze od wiadomości z id [since]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="since">Identyfikator wiadomości, od której rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetPrivateMessagesSince(BlipResponse callback, int since);

        /// <summary>
        /// Pobiera wiadomość prywatną o id [id]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="id">Identyfikator pobieranej wiadomości prywatnej</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetPrivateMessage(BlipResponse callback, int id);

        /// <summary>
        /// Usuwa wiadomość skierowaną o id [id]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="id">Identyfikator usuwanej wiadomości prywatnej</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool DelPrivateMessage(BlipResponse callback, int id);

        /// <summary>
        /// Tworzy nową wiadomość prywatną do użytkownika [recipientLogin]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="recipientLogin">Login odbiorcy wiadomości</param>
        /// <param name="text">Treść tworzonej wiadomości, bez prefisku wskazującego odbiorcę</param>
        /// <param name="picture">Adres obrazka w formacie jpg dołączonego do wiadomości</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool AddPrivateMessage(BlipResponse callback, string recipientLogin, string text, Uri picture = null);

        /// <summary>
        /// Tworzy nową wiadomość prywatną do użytkownika o identyfikatorze [recipientId]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="recipientId">Identyfikator odbiorcy wiadomości</param>
        /// <param name="text">Treść tworzonej wiadomości, bez prefisku wskazującego odbiorcę</param>
        /// <param name="picture">Adres obrazka w formacie jpg dołączonego do wiadomości</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool AddPrivateMessage(BlipResponse callback, int recipientId, string text, Uri picture = null);

        /// <summary>
        /// Pobiera do [limit] najnowszych powiadomień bieżącego użytkownika. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="limit">Limit pobieranych powiadomień</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetNotices(BlipResponse callback, int limit = 20);

        /// <summary>
        /// Pobiera wszytkie powiadomienia bieżącego użytkownika nowsze od wiadomości z id [since]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="since">Identyfikator powiadomienia, od którego rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetNoticesSince(BlipResponse callback, int since);

        /// <summary>
        /// Zwraca [limit] najstarszych powiadomień do wszystkich użytkowników nowszych od statusu z id [since]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="limit">Limit pobieranych powiadomień</param>
        /// <param name="since">Identyfikator powiadomienia, od którego rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetAllNotices(BlipResponse callback, int limit = 20, int? since = null);

        /// <summary>
        /// Zwraca [limit] ostatnich powiadomień użytkownika [login]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login użytkownika</param>
        /// <param name="limit">Limit pobieranych powiadomień</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUserNotices(BlipResponse callback, string login, int limit = 20);

        /// <summary>
        /// Pokazuje powiadomienia użytkownika [login], nowsze od statusu o id [id]. Wymaga uwierzytelnienia. 
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login użytkownika</param>
        /// <param name="since">Identyfikator powiadomienia, od którego rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUserNoticesSince(BlipResponse callback, string login, int since);

        /// <summary>
        /// Zwraca powiadomienie o id [id]. Wymaga uwierzytelnienia. 
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="id">Identyfikator pobieranego powiadomienia</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetNotice(BlipResponse callback, int id);

        /// <summary>
        /// Tworzy link (rdir.pl). Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="link">Adres URL, który ma zostać skrócony do wykorzystania z rdir.pl</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool CreateShortlink(BlipResponse callback, string link);

        /// <summary>
        /// Zwraca statusy/wiadomości które pojawiły się na kokpicie użytkownika [login] od update'u o id [since]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login użytkownika</param>
        /// <param name="since">Identyfikator wiadomości/statusu, od której rozpocznie się pobieranie</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetDashboard(BlipResponse callback, string login = null, int? since = null);

        /// <summary>
        /// Zwraca obecną zawartość bliposfery. Zawartość bliposfery będzie uwzględniać listę ignorowanych uwierzytelnionego użytkownika. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetMyBliposphere(BlipResponse callback);

        /// <summary>
        /// Zwraca aktualnie zalogowanego użytkownika. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetProfile(BlipResponse callback);

        /// <summary>
        /// Zwraca wszystkie subskrybcje bieżącego użytkownika. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetSubscriptions(BlipResponse callback);

        /// <summary>
        /// Zwraca subskrybcje od bieżącego użytkownika do innych użytkowników. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetSubscriptionsFrom(BlipResponse callback);

        /// <summary>
        /// Zwraca subskrybcje od innych użytkowników do bieżącego użytkownika. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetSubscriptionsTo(BlipResponse callback);

        /// <summary>
        /// Zwraca wszystkie subskrybcje użytkownika [login]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login użytkownika</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUserSubscriptions(BlipResponse callback, string login);

        /// <summary>
        /// Zwraca subskrybcje od użytkownika [login] do innych użytkowników. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login użytkownika</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUserSubscriptionsFrom(BlipResponse callback, string login);

        /// <summary>
        /// Zwraca subskrybcje od innych użytkowników do użytkownika [login]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login użytkownika</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool GetUserSubscriptionsTo(BlipResponse callback, string login);

        /// <summary>
        /// Usuwa subskrybcje pomiędzy bieżącym użytkownikiem a użytkownikiem [login]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login użytkownika</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool DelSubscriptions(BlipResponse callback, string login);

        /// <summary>
        /// Aktualizuje, lub w razie potrzeby tworzy subskrybcje pomiędzy bieżącym użytkownikiem, a użytkownikiem [login]. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="login">Login użytkownika do którego subskrybcja zostanie utworzona.</param>
        /// <param name="traceWWW">Wartość true lub false zaznaczająca czy użytkownik ma być śledzony przez www tj. kokpit</param>
        /// <param name="traceIM">Wartość true lub false zaznaczająca czy użytkownik ma być śledzony przez komunikator (odnosi skutek jedynie jeśli istnieje konfiguracja komunikatora)</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool AddSubscriptions(BlipResponse callback, string login, bool traceWWW = false, bool traceIM = false);

        /// <summary>
        /// Zmienia awatar bieżącego użytkownika. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="avatar">Obrazek w formacie jpg</param>
        /// <param name="progress">Delegat otrzymujący stan postępu wysyłania pliku</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool SetAvatar(BlipResponse callback, Uri avatar, UploadProgress progress = null);

        /// <summary>
        /// Usuwa awatar bieżącego użytkownika. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool DelAvatar(BlipResponse callback);

        /// <summary>
        /// Zmienia tło bieżącego użytkownika. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <param name="background">Obrazek w formacie jpg</param>
        /// <param name="progress">Delegat otrzymujący stan postępu wysyłania pliku</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool SetBackground(BlipResponse callback, Uri background, UploadProgress progress = null);

        /// <summary>
        /// Usuwa tło bieżącego użytkownika. Wymaga uwierzytelnienia.
        /// </summary>
        /// <param name="callback">Delegat wywoływany po otrzymaniu odpowiedzi</param>
        /// <returns>Prawda, gdy żądanie zostało wysłane do serwisu Blip</returns>
        bool DelBackground(BlipResponse callback);

        /// <summary>
        /// Dołączenie zasobów powiązanych bezpośrednio w reprezentacji "głównego" zasobu. Rozwinięcie klucza z końcówką "_path".
        /// </summary>
        /// <param name="add">Lista dołączanych parametrów, bez końcówki "_path"</param>
        /// <example>
        /// <code>
        /// api.Include("user", "user[avatar]", "pictures");
        /// </code>
        /// </example>
        void Include(params string[] add);
    }
}